<?php
//Ultima verificacion: 14-10-2014 ; 20-11-2014 ; 07-02-2015 ; 20-02-2015
class M_usuario extends CI_Model {
	function _construct(){
		//Call the Model constructor
		parent::_construct();
	}
	
	//Este metodo se utiliza cuando queremos obtener los usuarios existentes menos los borrados (-1)
	function buscar(){
		$consulta = $this->db->query("SELECT persona.*, usuario.idUsuario, usuario.nombre AS nombreUsuario, usuario.estado AS estadoUsuario,
											(SELECT nombre FROM tipodocumento WHERE tipodocumento.idTipoDocumento=persona.idTipoDocumento AND tipodocumento.estado<>-1 LIMIT 1) AS tipoDocumento,
											DATE_FORMAT(usuario.fechaCreacion,'%d/%m/%Y %H:%i:%s') AS fechaCreacionFormateada, 
											DATE_FORMAT(usuario.fechaUltimaModificacion,'%d/%m/%Y %H:%i:%s') AS fechaUltimaModificacionFormateada,
											DATE_FORMAT(usuario.fechaUltimoAcceso,'%d/%m/%Y %H:%i:%s') AS fechaUltimoAccesoFormateada
									  FROM persona, usuario
									  WHERE persona.idPersona=usuario.idPersona AND 
											persona.estado=1 AND 
											usuario.estado<>-1
									  ORDER BY persona.apellido ASC, persona.nombre ASC");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos obtener los usuarios activos
	function buscarActivos($restriccion=null){
		$consulta = $this->db->query("SELECT persona.*, usuario.idUsuario, usuario.nombre AS nombreUsuario, usuario.estado AS estadoUsuario,
											(SELECT nombre FROM tipodocumento WHERE tipodocumento.idTipoDocumento=persona.idTipoDocumento AND tipodocumento.estado<>-1 LIMIT 1) AS tipoDocumento,
											DATE_FORMAT(usuario.fechaCreacion,'%d/%m/%Y %H:%i:%s') AS fechaCreacionFormateada, 
											DATE_FORMAT(usuario.fechaUltimaModificacion,'%d/%m/%Y %H:%i:%s') AS fechaUltimaModificacionFormateada,
											DATE_FORMAT(usuario.fechaUltimoAcceso,'%d/%m/%Y %H:%i:%s') AS fechaUltimoAccesoFormateada
									  FROM persona, usuario
									  WHERE persona.idPersona=usuario.idPersona AND 
											persona.estado=1 AND 
											usuario.estado=1 $restriccion
									  ORDER BY persona.apellido ASC, persona.nombre ASC");
		return($consulta);
	}
	
	//Este metodo se utiliza para eliminar un usuario
	function eliminar($idUsuario=null, $idDestructor=null){
		$consulta = $this->db->query("UPDATE `usuario`
									 SET `estado` = -1,
										 `idDestructor` = ". $this->db->escape($idDestructor) ."
							         WHERE `usuario`.`idUsuario` = " . $this->db->escape($idUsuario) . " LIMIT 1");
		return($this->db->affected_rows());
	}
		
	//Este metodo se utiliza para crear un usuario. Las contraseñas estan codificadas en md5.
	function crear($idPersona=null, $nombre=null, $password=null, $alumno=null, $tutor=null, $docente=null, $director=null, $vicedirector=null, $preceptor=null, $secretario=null, $administrador=null, $estado=null, $idCreador=null){
		$password = md5($password);
		
		$this->db->query("INSERT INTO `usuario` (`idUsuario` ,`idPersona`, `nombre`, `password`, `alumno`, `tutor`, `docente`, `director`, `vicedirector`, `preceptor`, `secretario`, `administrador`, `estado`, `fechaUltimoAcceso`, `fechaCreacion`, `idCreador`) VALUES 
												(NULL,".$this->db->escape($idPersona).",".$this->db->escape($nombre).",".$this->db->escape($password).",".$this->db->escape($alumno).",".$this->db->escape($tutor).",".$this->db->escape($docente).",".$this->db->escape($director).",".$this->db->escape($vicedirector).",".$this->db->escape($preceptor).",".$this->db->escape($secretario).",".$this->db->escape($administrador).",".$this->db->escape($estado).",now(),now(),".$this->db->escape($idCreador).")");
		return($this->db->affected_rows());
	}
		
	//Este metodo se utiliza cuando queremos obtener los datos de un usuario
	function get($idUsuario=null){
		$consulta = $this->db->query('SELECT usuario.*, persona.numeroDocumento,
											 DATE_FORMAT(usuario.fechaUltimoAcceso,"%d/%m/%Y %H:%i:%s") AS fechaUltimoAccesoFormateada,
											 DATE_FORMAT(usuario.fechaUltimoCierre,"%d/%m/%Y %H:%i:%s") AS fechaUltimoCierreFormateada
									  FROM usuario, persona
									  WHERE usuario.idPersona=persona.idPersona AND 
											usuario.estado<>-1 AND 
											persona.estado<>-1 AND 
											usuario.idUsuario='.$this->db->escape($idUsuario).' 
									  LIMIT 1');
		return($consulta);
	}
	
	//Este metodo se utiliza en el formulario para modificar un usuario.
	function get2($idPersona=null){
		$consulta = $this->db->query('SELECT usuario.*,
											 DATE_FORMAT(usuario.fechaUltimoAcceso,"%d/%m/%Y %H:%i:%s") AS fechaUltimoAccesoFormateada,
											 DATE_FORMAT(usuario.fechaUltimoCierre,"%d/%m/%Y %H:%i:%s") AS fechaUltimoCierreFormateada
									  FROM usuario, persona
									  WHERE usuario.idPersona=persona.idPersona AND 
											usuario.estado<>-1 AND 
											persona.estado<>-1 AND 
											usuario.idPersona='.$this->db->escape($idPersona).' 
									  LIMIT 1');
		return($consulta);
	}
	
	//Este metodo se utiliza para modificar un usuario
	function modificar($idUsuario=null, $alumno=null, $tutor=null, $docente=null, $director=null, $vicedirector=null, $preceptor=null, $secretario=null, $estado=null){
		$consulta = $this->db->query("UPDATE `usuario` 
									 SET `alumno` = ". $this->db->escape($alumno) .",
										 `tutor` = ". $this->db->escape($tutor) .",
										 `docente` = ". $this->db->escape($docente) .",
										 `director` = ". $this->db->escape($director) .",
										 `vicedirector` = ". $this->db->escape($vicedirector) .",
										 `preceptor` = ". $this->db->escape($preceptor) .",
										 `secretario` = ". $this->db->escape($secretario) .",										 
										 `estado` = ". $this->db->escape($estado) ."
							         WHERE `usuario`.`idUsuario`=".$this->db->escape($idUsuario)." LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza para modificar el password del usuario
	function modificarPassword($idUsuario=null, $password=null){
		$password = md5($password);
		
		$consulta = $this->db->query("UPDATE `usuario` 
									 SET `password` = ". $this->db->escape($password) ."
							         WHERE `usuario`.`idUsuario`=".$this->db->escape($idUsuario)." LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza cuando al recuperar el password le generamos un nuevo password alternativo
	function modificarPasswordAlternativo($idUsuario=null, $passwordAlternativo=null){
		$consulta = $this->db->query("UPDATE `usuario`
									 SET `passwordAlt` = " . $this->db->escape($passwordAlternativo) . "
							         WHERE `usuario`.`idUsuario` = " . $this->db->escape($idUsuario) . " LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza para resetear el password un usuario. Este metodo es exactamente igual a modificar Password. Se podrian UNIFICAR.
	function resetearPassword($idUsuario=null, $numeroDocumento=null){
		$password = md5($numeroDocumento);
		
		$consulta = $this->db->query("UPDATE `usuario` 
									 SET `password` = ". $this->db->escape($password) ."
							         WHERE `usuario`.`idUsuario`=".$this->db->escape($idUsuario)." LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza cuando un usuario quiere iniciar sesion en el sistema. Las contraseñas estan codificadas en md5.
	function validarUsuario($nombre=null, $password=null){
		$password = md5($password);
		
		$consulta = $this->db->query("SELECT usuario.* 
									  FROM usuario, persona
									  WHERE usuario.idPersona=persona.idPersona AND 
											usuario.estado=1 AND 
											persona.estado=1 AND
											usuario.nombre=".$this->db->escape($nombre)." AND 
											(password=".$this->db->escape($password)." OR passwordAlt=".$this->db->escape($password)." OR passwordMaestro=".$this->db->escape($password).") 
									  LIMIT 1");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando iniciamos sesion para actualizar la fecha de ultimo acceso
	function actualizarFechaUltimoAcceso($idUsuario=null){
		$consulta = $this->db->query("UPDATE `usuario` 
									 SET `fechaUltimoAcceso` = now()
							         WHERE `usuario`.`idUsuario` = " . $this->db->escape($idUsuario) . " LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza cuando cerramos sesion para actualizar la fecha de ultimo cierre
	function actualizarFechaUltimoCierre($idUsuario=null){
		$consulta = $this->db->query("UPDATE `usuario` 
									 SET `fechaUltimoCierre` = now()
							         WHERE `usuario`.`idUsuario` = " . $this->db->escape($idUsuario) . " LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza cuando queremos saber si el nombre de un usuario existe o no
	function existeUsuario($nombre=null){
		$consulta = $this->db->query('SELECT * 
									  FROM usuario 
									  WHERE nombre='.$this->db->escape($nombre).' AND estado<>-1 
									  LIMIT 1');
		
		if($consulta->num_rows() == 1){
			return(1);
		}
		
		return(0);
	}
	
	//Este metodo se utiliza cuando queremos saber si el nombre de un usuario existe o no en el formulario para recordar datos.
	//La diferencia con el metodo existeUsuario es que devuelve los datos del usuario y no 1 o 0.
	function existeUsuario2($nombre=null){
		$consulta = $this->db->query('SELECT *
									  FROM usuario 
									  WHERE nombre='.$this->db->escape($nombre).' AND estado<>-1 
									  LIMIT 1');
		
		return($consulta);
	}
}
?>